﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ReadAndWrite
{
    /// <summary>
    /// Cette interface doit etre implémenté par tout objet souhaitant être sérialisé dans un fichier CSV.
    /// Elle permet d'exposer les attributs à écrire dans le fichier 
    /// mais aussi d'affecter les valeurs d'une ligne du fichier à ces attributs.
    /// </summary>
    public interface ISerializableCSV
    {
        /// <summary>
        /// Cette méthode permet d'exposer les attributs d'un objet qui vont être sérialisé dans le fichier CSV.
        /// Il suffit juste de construire une liste des valeurs des attributs et de la retourner.
        /// </summary>
        /// <returns>Liste des valeurs (attributs) de l'objet</returns>
        List<Object> exposeAttributes();

        /// <summary>
        /// Cette méthode permet d'initialiser les propriétés d'un objet via un tableau de string.
        /// Ce tableau provient d'une ligne du fichier CSV parser via le séparateur.
        /// Ainsi il suffit juste d'affecter à l'attribut la valeur de l'objet data[X] en le convertissant en Entier, Boolean, etc ..
        /// </summary>
        /// <param name="data">Données d'une ligne du fichier.</param>
        /// <returns>Retourne un booléan qui permet de savoir si l'importation des données c'est bien passé</returns>
        bool importAttributes(string[] data);

        /// <summary>
        /// Cette méthode permet de définir les noms des colonnes.
        /// </summary>
        /// <param name="separateur">Séparateur définit par l'utilisateur.</param>
        /// <returns>Retourne un tableau de string définissant les noms des colonnes.</returns>
        String exposeHeader(String separateur);

    }
}
